﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaskelot.SP.Model.Client;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using Kaskelot.SP.Core;
using Kaskelot.SP.Model.Client.Forms;

namespace Kaskelot.SP.Services.Client.Mapping
{
	public static class ClientPersonByggnadExtensions
	{
		public static ClientPersonByggnad ToClientContract(this PersonByggnad entity)
		{
			ClientPersonByggnad b = new ClientPersonByggnad();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static ClientPersonByggnad ToMinimalClientContract(this PersonByggnad entity)
		{
			ClientPersonByggnad b = new ClientPersonByggnad();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static PersonByggnad ToContract(this ClientPersonByggnad b)
		{
			PersonByggnad entity = new PersonByggnad();

			CopyToEntity(b, entity);

			return entity;
		}

		public static PersonByggnad UpdateContract(this PersonByggnad pb, KontaktpersonForm form)
		{
			if (pb.Id == Guid.Empty)
			{
				pb.Id = Guid.NewGuid();
			}

			pb.ByggnadId = new Guid(form.ByggnadId);
			pb.PersonId = new Guid(form.PersonId);

			return pb;
		}

		private static void CopyFromEntity(PersonByggnad from, ClientPersonByggnad to, bool minimal)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Andrad = from.Andrad != null ? from.Andrad.ToString() : null;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad != null ? from.Skapad.ToString() : null;
			to.SkapadAv = from.SkapadAv;

			to.PersonId = from.PersonId;
			to.ByggnadId = from.ByggnadId;
		}

		private static void CopyToEntity(ClientPersonByggnad from, PersonByggnad to)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Andrad = DateTime.Parse(from.Andrad);
			to.AndradAv = from.AndradAv;
			to.Skapad = DateTime.Parse(from.Skapad);
			to.SkapadAv = from.SkapadAv;

			to.PersonId = from.PersonId;
			to.ByggnadId = from.ByggnadId;
		}
	}
}
